template<class T>
struct BiNode
{
    T data;
    BiNode<T> *lchild,*rchild;
};
template<class T>
class BiTree
{    
  public:
       BiTree(); 
        ~BiTree();  
		BiNode<T> *GetRoot(){return root;} 
		void Putroot(BiNode<T> *r){root=r;	} 
		  
        void PreOrder(BiNode<T> *root); 
        void InOrder(BiNode<T> *root); 
        void PostOrder(BiNode<T> *root); 
        void LeverOrder(BiNode<T> *root);
		
		void Count(BiNode<T> *root);  
		void Countleaf(BiNode<T> *root);
		int Countleaf1(BiNode<T> *root);
		int  Depth(BiNode<T> *root);
		void Countmax(BiNode<T> *root);
     
  private:
        BiNode<T> *root; 
        BiNode<T>* Creat(); 
        void Release(BiNode<T> *root);
 };

